]> dgit.raspbian.org Git - gnome-shell.git/commitdiff
overview: Add API to remove search providers
authorPhilippe Normand <philn@igalia.com>
Sun, 28 Aug 2011 11:20:37 +0000 (13:20 +0200)
committerFlorian Müllner <fmuellner@gnome.org>
Sun, 4 Sep 2011 11:28:08 +0000 (13:28 +0200)
As extensions are now expected to provide a "disable" function,
they need to remove search providers they added. Implement the
removal functionality and add a public removeSearchProvider()
method.

https://bugzilla.gnome.org/show_bug.cgi?id=657548

js/ui/overview.js
js/ui/search.js
js/ui/searchDisplay.js
js/ui/viewSelector.js

index 6b36771c9a67771e0846266a25acccc0e6f67532..1f6d366eb42b255861db45727a75bc301f272401 100644 (file)
@@ -237,6 +237,10 @@ Overview.prototype = {
         this._viewSelector.addSearchProvider(provider);
     },
 
+    removeSearchProvider: function(provider) {
+        this._viewSelector.removeSearchProvider(provider);
+    },
+
     setMessage: function(text, undoCallback, undoLabel) {
         if (this.isDummy)
             return;
index 5b6a2c28fd29d2bc9b6600fd668eb06ea8a66b3c..055bf0f243e4a3c5dd491879b228011ad1ed0bc5 100644 (file)
@@ -356,6 +356,14 @@ SearchSystem.prototype = {
         this._providers.push(provider);
     },
 
+    unregisterProvider: function (provider) {
+        let index = this._providers.indexOf(provider);
+        if (index == -1)
+            return;
+        provider.searchSystem = null;
+        this._providers.splice(index, 1);
+    },
+
     getProviders: function() {
         return this._providers;
     },
index 04ef64cdfbd7959b97dacb7e8217c91336b6ff22..42c1a26b28f30dfd35107c54f2686a84e333bce7 100644 (file)
@@ -294,11 +294,23 @@ SearchResults.prototype = {
         }
         resultDisplayBin.set_child(resultDisplay.actor);
 
-        this._providerMeta.push({ actor: providerBox,
+        this._providerMeta.push({ provider: provider,
+                                  actor: providerBox,
                                   resultDisplay: resultDisplay });
         this._content.add(providerBox);
     },
 
+    destroyProviderMeta: function(provider) {
+        for (let i=0; i < this._providerMeta.length; i++) {
+            let meta = this._providerMeta[i];
+            if (meta.provider == provider) {
+                meta.actor.destroy();
+                this._providerMeta.splice(i, 1);
+                break;
+            }
+        }
+    },
+
     _clearDisplay: function() {
         this._selectedProvider = -1;
         this._visibleResultsCount = 0;
index b33139f5767436fd38563c6417cbd6b7a8d22c33..939fd4c57cd6f4dfdc322fdc64ac17a1c05b9f11 100644 (file)
@@ -210,6 +210,11 @@ SearchTab.prototype = {
         this._searchResults.createProviderMeta(provider);
     },
 
+    removeSearchProvider: function(provider) {
+        this._searchSystem.unregisterProvider(provider);
+        this._searchResults.destroyProviderMeta(provider);
+    },
+
     startSearch: function(event) {
         global.stage.set_key_focus(this._text);
         this._text.event(event, false);
@@ -563,6 +568,10 @@ ViewSelector.prototype = {
 
     addSearchProvider: function(provider) {
         this._searchTab.addSearchProvider(provider);
+    },
+
+    removeSearchProvider: function(provider) {
+        this._searchTab.removeSearchProvider(provider);
     }
 };
 Signals.addSignalMethods(ViewSelector.prototype);